/**
 * @name 公用的js类
 *
 * 包括
 * 1）js原始对象的扩展
 * 2) bootstrap 的相关扩展
 * 3) 公共功能的代码
 *
 */
var Common=function () {

    /**
     * 按鍵的編碼
     * @type {number[]}
     */
    var keyCodes=[8];

    /**
     * 初始化按鍵的方法
     */
    var initCodesHandler= function(){
        if(keyCodes.length>1){
            return;
        }
        for(var i=48; i<58; i++){
            keyCodes.push(i);
        }
        for(var i=96; i<106;i++){
            keyCodes.push(i);
        }
        keyCodes.push(13);
    };
    
    var inputHandler= function () {
        $('.number').on("keydown",function(e){
            initCodesHandler();
            if(!keyCodes.hasCode(e.keyCode)){
                return false
            }

        })
    }

    var ArrayUntis= function () {

        Array.prototype.hasCode=function(value){
            var isValue= false;
            for(var i=0; i<this.length; i++){
                if(this[i]==value){
                    isValue=true;
                }
            }
            return isValue;
        }

        /**
         * 数组去重
         * 返回不包含重复元素的数组
         * @returns {Array}
         */
        Array.prototype.distinst= function () {
            var arr= [];
            for (var i=0; i<this.length; i++){
                if(arr.indexOf(this[i])===-1){
                    arr.push(this[i]);
                }
            }
            return arr;
        }

        /**
         * 数组删除元素
         * 包括 字符串和数组
         *
         * @param element
         * 字符串或数组
         *
         * @returns {*}
         */
        Array.prototype.delete= function (element) {
            if (this===null || this.length===0){
                return null;
            }
            if(element===null || element.length===0){
                return this;
            }
            for (var i=0; i<this.length; i++){
                if (element instanceof Array){
                    for (var j=0; j<element.length; j++){
                        if (this[i]=== element[j]){
                            this[i]=null;
                        }
                    }
                }else if(typeof element==="string"){
                    if (this[i]=== element){
                        this[i]=null;
                    }
                }
            }
            return this;
        };

        /**
         * 校验两个数组是否相等
         * @param element
         * 当前的数组
         * @returns {boolean}
         */
        Array.prototype.equals=function (element) {
            var boolean=true;
            if (!element instanceof Array){
                return false;
            }
            if (this.length!== element.length) {
                return false;
            }
            for (var i=0; i<this.length;i++){
                if (this[i]!==element[i]){
                    boolean=false;
                }
            }
            return boolean;
        }
        
    };

    /**
     * 初始化表单的函数
     */
    var formInitHandler= function () {
        console.log("this is ok");
        $('.i-checks').iCheck({
            checkboxClass: "icheckbox_square-green",
            radioClass: "iradio_square-green"})
    };

    /**
     * 提示信息的函数
     *
     * @param message
     * 提示的内容
     *
     * @param position
     * 提示在页面展示的位置
     *
     * @param timeout
     * 展示好多时间
     *
     * @param theme
     * 图文
     *
     * @param icon
     * 图标
     *
     * @param closable
     * 关闭的按钮是否展示
     *
     * @constructor
     */
    var Notify= function(message, position, timeout, theme, icon, closable) {
        toastr.options.positionClass = 'toast-' + position;
        toastr.options.extendedTimeOut = 0; //1000;
        toastr.options.timeOut = timeout;
        toastr.options.closeButton = closable;
        toastr.options.iconClass = icon + ' toast-' + theme;
        toastr['custom'](message);
    }

    /**
     * 提示
     * @param json
     */
    var alertHandler= function (json) {
        var type="";
        if(json.success){
            type="success";
        }else {
            type="error";
        }
        var content=json.message;
        var icon="";
        if(json.success){
            content="操作成功";
            icon="fa fa-check";
        }else {
            icon="fa fa-times";

        }
        var time=1200;
        Notify(content,"center-center",time,type,icon,true);
    }

    /**
     * 表单校验时使用的函数
     */
    var validateHandler= function () {
        jQuery.validator.addMethod("Relation", function(value, element) {
            var length = value.length;
            var phone = /(^(\d{3,4}-)?\d{6,8}$)|(^(\d{3,4}-)?\d{6,8}(-\d{1,5})?$)|(\d{11})|^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1})|(17[0-9]{1}))+\d{8})$/;
            return this.optional(element) || (phone.test(value));
        }, "请填写正确的固定电话");//可以自定义默认提示信息

        jQuery.validator.addMethod("phone", function(value, element) {
            var length = value.length;
            var phone = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1})|(17[0-9]{1}))+\d{8})$/;
            return this.optional(element) || (phone.test(value));
        }, "请填写正确的手机号码");//可以自定义默认提示信息


        jQuery.validator.addMethod("telphone", function(value, element) {
            var length = value.length;
            var phone = /(^(\d{3,4}-)?\d{6,8}$)|(^(\d{3,4}-)?\d{6,8}(-\d{1,5})?$)/;
            return this.optional(element) || (phone.test(value));
        }, "请填写正确的手机号码");//可以自定义默认提示信息
        jQuery.validator.addMethod("isZipCode", function(value, element) {
            var tel = /^[0-9]{6}$/;
            return this.optional(element) || (tel.test(value));
        }, "请正确填写您的邮政编码");
    }

    /**
     * 上传的共用函数
     *
     * @param type
     * 上传的类型
     *
     * @param documentId
     * 文件表单的id
     *
     * @param domeid
     * 存放元素的id
     */
    var uploadHandler= function (documentId,type,domeid) {
        var file= $("#"+documentId);
        if (file.length>0){
            file.on("change",function () {
                var filelist = this.files;
                var $this= $(this);
                var file= filelist[0];
                var xml = new XMLHttpRequest();
                xml.open("post",base+"/common/upload");
                var fd= new FormData();
                fd.append("type",type);
                fd.append("file",file);
                xml.send(fd);
                xml.addEventListener("load",function(e){
                    var result= e.target.responseText;
                    result=JSON.parse(result);
                    console.log(result);
                    if(result.code===1){
                        var html="<img src='"+result.data+"' width='100%'> ";
                        if($this.parent().find("img")){
                            $this.parent().find("img").remove();
                        }
                        $("#"+domeid).val(result.data);
                        $this.parent().find('img').remove();
                        $this.parent().append(html);
                    }
                },false)
            })
        }
    };


    //分页工具函数
    var pagePluginHandler=function(){
        $('.ibox').on('click','.page a',function() {
            console.log("this is page");
            if ($(this).parent().hasClass("disabled")){
                return;
            }
            if($(this).parent().hasClass("page-pre")){
                var pageNumber=$("#pageNumber").val();
                pageNumber--;
                console.log(pageNumber);
                $("#pageNumber").val(pageNumber)
            }else if($(this).parent().hasClass("page-next")){
                var pageNumber=$('#pageNumber').val();
                pageNumber++;
                $('#pageNumber').val(pageNumber);
            }else{
                var pageNumber=$(this).data("page");
                //console.log(pageNumber);
                $('#pageNumber').val(pageNumber);
            }
           var form= $('form');
            if (form.length>0){
                form=$('form:eq(0)');
            }
            form.submit();
        });
        $('#pageSizeSelect').on('change',function () {
            var pageSize= $(this).val();
            $('#pageSize').val(pageSize);
            $('form').submit();
        })
    }

    return{
        /**
         * 初始化加载的函数
         *
         */
        init:function () {
            ArrayUntis();
        },

        /**
         * 提示的函数
         *
         * @param json
         */
        alert:function (json) {
            alertHandler(json);
        },
        /**
         * 添加表单校验的方法
         */
        validate:function () {
            validateHandler();
        },

        /**
         * 上传的函数
         * @param documentId
         * @param type
         * @param dome
         */
        upload:function (documentId,type,dome) {
            uploadHandler(documentId,type,dome);
        },

        /**
         * 分页的函数
         *
         */
        page:function () {
            pagePluginHandler();
        },

        checkbox:function () {
            formInitHandler();
        },
        input:function () {
            this.init();
            inputHandler();
        }
    }
}();
